package com.jay.loadbalancer;

import com.jay.spi.SpiLoader;

/**
 * 负载均衡器工厂（工厂模式，用于获取负载均衡器对象）
 * 该工厂类使用了SPI（Service Provider Interface）机制来加载和实例化负载均衡器
 * 通过静态代码块预加载LoadBalancer的实现类，确保在类加载时完成初始化
 */
public class LoadBalancerFactory {

    // 静态代码块，用于加载LoadBalancer的实现类
    static {
        SpiLoader.load(LoadBalancer.class);
    }

    /**
     * 默认负载均衡器
     * 使用RoundRobin（循环）策略的负载均衡器作为默认值
     */
    private static final LoadBalancer DEFAULT_LOAD_BALANCER = new RoundRobinLoadBalancer();

    /**
     * 根据指定键获取负载均衡器实例
     * 如果找不到对应的实现类，则返回默认的负载均衡器实例
     *
     * @param key 负载均衡器的键，用于识别特定的负载均衡策略
     * @return 对应键的负载均衡器实例，如果找不到则返回默认实例
     */
    public static LoadBalancer getInstance(String key) {
        return SpiLoader.getInstance(LoadBalancer.class, key);
    }

}
